package com.yqiang.smscodedemo.utils;

import com.aliyun.dysmsapi20170525.Client;
import com.aliyun.dysmsapi20170525.models.SendSmsRequest;
import com.aliyun.dysmsapi20170525.models.SendSmsResponse;
import com.aliyun.teaopenapi.models.Config;
import com.yqiang.smscodedemo.config.AliyunSmsProperties;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Component;

/**
 * 阿里云短信服务工具类
 */
@Component
public class AliyunSmsUtils {
    @Resource
    private AliyunSmsProperties aliyunSmsProperties;

    /**
     * 发送短信验证码
     *
     * @param phoneNumbers 接收短信的手机号码
     * @param templateParam 短信模板参数
     * @return 短信发送响应结果
     * @throws RuntimeException 如果短信发送失败，则抛出运行时异常
     */
    public SendSmsResponse sendSms(String phoneNumbers, String templateParam){
        // 配置阿里云短信服务客户端
        Config config = new Config()
                // 配置 AccessKey ID，请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
                .setAccessKeyId(aliyunSmsProperties.getAccessKeyId())
                // 配置 AccessKey Secret，请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
                .setAccessKeySecret(aliyunSmsProperties.getAccessKeySecret());
        // 配置 Endpoint
        config.endpoint = "dysmsapi.aliyuncs.com";
        try {
            // 初始化请求客户端
            Client client = new Client(config);
            // 构建发送短信请求
            SendSmsRequest sendSmsRequest = new SendSmsRequest()
                    .setPhoneNumbers(phoneNumbers)
                    .setSignName(aliyunSmsProperties.getSignName())
                    .setTemplateCode(aliyunSmsProperties.getTemplateCode())
                    .setTemplateParam(templateParam);

            // 发送短信并返回响应结果
            return client.sendSms(sendSmsRequest);
        }catch (Exception e){
            // 如果短信发送失败，则抛出运行时异常
            throw new RuntimeException("发送验证码失败");
        }
    }
}
